home *** CD-ROM | disk | FTP | other *** search
- /* TABSIZE 4
- * @(#)XHDItest.c
- * 1995-05-27 von Rainer Seitel, Rastatt, DE.
- * 1995-07-28 Zweisprachig: deutsch wenn _AKP = $??????01??, sonst englisch.
- * 1995-10-17 Alte DOS-Limits werden beim Programmende restauriert.
- * Public domain
- */
-
-
- #include <stdio.h>
- #include "xhdi.h" /* static bei getcookie() auskommentieren */
-
-
- #define E_OK 0
- #define EDRVNR -2
- #define EINVFN -32
- #define FIRST_CLUSTER 2
- #define NUM_DRIVES 32
-
-
- int main( int argc, unsigned char *argv[] )
- {
- long german, r;
- LONG old_secsiz, old_minfat, old_maxfat, old_minspc, old_maxspc, old_clusts,
- old_maxsec, old_drives;
- UWORD dos_version, xhdi, major, minor;
- ULONG start_sector = 0, blocks = 0;
- const BPB bpb;
- unsigned char partid[4] = {0, 0, 0, 0};
-
- /* Landessprache bestimmen */
- if (getcookie(0x5F414B50L, &german)) /* _AKP */
- german = (german & 0xFF00) == 0x100;
- else
- german = 0;
-
- dos_version = Sversion();
- printf("\rXHDI-Test 1995-10-17 Rainer Seitel\n\n"\
- "GEMDOS Version %x.%02x\n\n", dos_version & 0xFF, dos_version >> 8);
-
- xhdi = XHGetVersion();
- if (german)
- printf("Plattentreiber hat XHDI %x.%02x", xhdi >> 8, xhdi & 0xFF);
- else
- printf("Hard disc driver has XHDI %x.%02x", xhdi >> 8, xhdi & 0xFF);
-
- if (xhdi) {
- old_secsiz = XHDOSLimits(XH_DL_SECSIZ, 0);
- old_minfat = XHDOSLimits(XH_DL_MINFAT, 0);
- old_maxfat = XHDOSLimits(XH_DL_MAXFAT, 0);
- old_minspc = XHDOSLimits(XH_DL_MINSPC, 0);
- old_maxspc = XHDOSLimits(XH_DL_MAXSPC, 0);
- old_clusts = XHDOSLimits(XH_DL_CLUSTS, 0);
- old_maxsec = XHDOSLimits(XH_DL_MAXSEC, 0);
- old_drives = XHDOSLimits(XH_DL_DRIVES, 0);
-
- printf(", XHDOSLimits :-");
- if (XHDOSLimits(XH_DL_MAXSEC, 0xFFFFFFL) == EINVFN)
- printf("(");
- else if (XHDOSLimits(XH_DL_MAXSEC, old_maxsec) != 0xFFFFFFL)
- printf("/");
- else
- printf(")");
-
- printf("\nXHDI-DOS-Limits XH_DL_SECSIZ: %ld\n", old_secsiz);
- printf("XHDI-DOS-Limits XH_DL_MINFAT: %ld\n", old_minfat);
- printf("XHDI-DOS-Limits XH_DL_MAXFAT: %ld\n", old_maxfat);
- printf("XHDI-DOS-Limits XH_DL_MINSPC: %ld\n", old_minspc);
- printf("XHDI-DOS-Limits XH_DL_MAXSPC: %ld\n", old_maxspc);
- printf("XHDI-DOS-Limits XH_DL_CLUSTS: %ld\n", old_clusts);
- printf("XHDI-DOS-Limits XH_DL_MAXSEC: %ld\n", old_maxsec);
- printf("XHDI-DOS-Limits XH_DL_DRIVES: %ld\n", old_drives);
-
- /* Bei Plattentreiber mit XHDI 1.20 DOS-Limits einstellen. */
- if (xhdi >= 0x120) {
- if (german)
- printf("XHDI ≥ 1.20, versuche Big-DOS-Werte einzustellen:\n");
- else
- printf("XHDI ≥ 1.20, try to set Big-DOS limits:\n");
- XHDOSLimits(XH_DL_SECSIZ, 32768L);
- XHDOSLimits(XH_DL_MINFAT, 1);
- XHDOSLimits(XH_DL_MAXFAT, 2);
- XHDOSLimits(XH_DL_MINSPC, 1);
- XHDOSLimits(XH_DL_MAXSPC, 64);
- XHDOSLimits(XH_DL_CLUSTS, 0xFFF0L-FIRST_CLUSTER);
- XHDOSLimits(XH_DL_MAXSEC, 0xFFFFFFL);
- XHDOSLimits(XH_DL_DRIVES, NUM_DRIVES);
- printf("XHDI-DOS-Limits XH_DL_SECSIZ: %ld\n", XHDOSLimits(XH_DL_SECSIZ, old_secsiz));
- printf("XHDI-DOS-Limits XH_DL_MINFAT: %ld\n", XHDOSLimits(XH_DL_MINFAT, old_minfat));
- printf("XHDI-DOS-Limits XH_DL_MAXFAT: %ld\n", XHDOSLimits(XH_DL_MAXFAT, old_maxfat));
- printf("XHDI-DOS-Limits XH_DL_MINSPC: %ld\n", XHDOSLimits(XH_DL_MINSPC, old_minspc));
- printf("XHDI-DOS-Limits XH_DL_MAXSPC: %ld\n", XHDOSLimits(XH_DL_MAXSPC, old_maxspc));
- printf("XHDI-DOS-Limits XH_DL_CLUSTS: %ld\n", XHDOSLimits(XH_DL_CLUSTS, old_clusts));
- printf("XHDI-DOS-Limits XH_DL_MAXSEC: %ld\n", XHDOSLimits(XH_DL_MAXSEC, old_maxsec));
- printf("XHDI-DOS-Limits XH_DL_DRIVES: %ld\n", XHDOSLimits(XH_DL_DRIVES, old_drives));
- }
-
- if (argc < 2)
- if (german)
- printf("\nKein GEMDOS-Laufwerksbuchstabe übergeben!\n");
- else
- printf("\nNo GEMDOS drive letter specified!\n");
- else {
- r = XHInqDev2((*argv[1] & 0x5F) - 'A', &major, &minor, &start_sector,
- &bpb, &blocks, partid);
- if (r == E_OK || r == EDRVNR) {
- if (partid[0] == 0 && partid[1] == 'D') { /* MS-DOS-Partition */
- partid[0] = ' ';
- partid[2] += '0';
- }
- if (german)
- printf("\nLaufwerk %c: major %d, minor %d, Start %ld, Größe %ld, ID %s,\n",
- *argv[1] & 0x5F, major, minor, start_sector, blocks, partid);
- else
- printf("\nDrive %c: major %d, minor %d, start %ld, size %ld, ID %s,\n",
- *argv[1] & 0x5F, major, minor, start_sector, blocks, partid);
- if (r == E_OK) {
- printf("BPB recsiz %u, ", bpb.recsiz);
- printf("BPB clsiz %d, ", bpb.clsiz);
- printf("BPB clsizb %u, ", bpb.clsizb);
- printf("BPB rdlen %d, ", bpb.rdlen);
- printf("BPB fsiz %d,\n", bpb.fsiz);
- printf("BPB fatrec %d, ", bpb.fatrec);
- printf("BPB datrec %d, ", bpb.datrec);
- printf("BPB numcl %u, ", bpb.numcl);
- printf("BPB bflags %d\n", bpb.bflags);
- }
- }
- }
- } /* if (xhdi) */
-
- Bconin(2); /* braucht 700 Byte weniger als getchar() */
- return 0;
- }
-